package org.android.brasil.projetos.oktoberfest2011.persistencia;

import java.util.ArrayList;
import java.util.List;

import org.android.brasil.projetos.oktoberfest2011.negocio.model.Horario;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;

public class HorarioDAO extends BasicoDAO {

	public static final String COLUNA_ID_HORARIO = "_id";
	public static final String COLUNA_DIA = "dia";
	public static final String COLUNA_ABERTURA = "abertura";
	public static final String COLUNA_FECHAMENTO = "fechamento";
	
	public static String TABELA_HORARIOS = "horarios";

	public static final int SIM = 1;
	public static final int NAO = 0;

	public static String CREATE_TABLE = "CREATE  TABLE " + TABELA_HORARIOS + " (  "
			+ COLUNA_ID_HORARIO + " INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL ,  "
			+ COLUNA_DIA + " INTEGER  ,  " + COLUNA_ABERTURA + " REAL  ,  "+ COLUNA_FECHAMENTO + " REAL );";

	public HorarioDAO(Context ctx) {
		super(ctx);
	}

	public static long inserir(Horario hor) {
		ContentValues values = deHorarioParaContentValues(hor);
		return inserir(TABELA_HORARIOS, values);
	}

	public static long atualizar(Horario hor) {
		ContentValues values = deHorarioParaContentValues(hor);
		return atualizar(TABELA_HORARIOS, values, new String[] { COLUNA_ID_HORARIO },
				new String[] { String.valueOf(hor.getIdHorario()) });
	}

	public static Horario get(long idHorario) {
		Cursor c = consultar(TABELA_HORARIOS, COLUNA_ID_HORARIO,
				String.valueOf(idHorario));
		Horario hor = deCursorParaHorario(c);
		c.close();
		return hor;
	}

	public static Horario consultarPorDia(int dia) {
		Cursor c = consultar(TABELA_HORARIOS, COLUNA_DIA ,String.valueOf(dia));
		Horario hor = new Horario();

		if (c != null) {
			c.moveToFirst();
			while (!c.isAfterLast()) {
				hor = deCursorParaHorario(c);
				c.moveToNext();
			}
			c.close();
		}
		return hor;
	}

	private static Horario deCursorParaHorario(Cursor c) {
		Horario hor = new Horario();
		hor.setIdHorario((c.getLong(c.getColumnIndex(COLUNA_ID_HORARIO))));
		hor.setDia(c.getInt(c.getColumnIndex(COLUNA_DIA)));
		float hora = c.getFloat(c.getColumnIndex(COLUNA_ABERTURA));
		hora = hora > 24 ? hora - 24 : hora;

		hor.setAbertura(hora);
		hora = c.getFloat(c.getColumnIndex(COLUNA_FECHAMENTO));
				hora = hora > 24 ? hora - 24 : hora;
		hor.setFechamento(hora);

		return hor;
	}

	private static ContentValues deHorarioParaContentValues(Horario hor) {
		ContentValues values = new ContentValues();

		values.put(COLUNA_DIA, hor.getDia());
		values.put(COLUNA_ABERTURA, hor.getAbertura() < 10 ? hor.getAbertura() + 24 : hor.getAbertura());
		values.put(COLUNA_FECHAMENTO, hor.getFechamento() < 10 ? hor.getFechamento() + 24 : hor.getFechamento());

		return values;
	}

	public static Cursor consultarTodos() {
		return consultarTodos(TABELA_HORARIOS);
	}

	public static List<Horario> consultarListTodos() {
		Cursor c = consultarTodos(TABELA_HORARIOS);

		List<Horario> hors = new ArrayList<Horario>();

		if (c != null) {
			c.moveToFirst();
			while (!c.isAfterLast()) {
				hors.add(deCursorParaHorario(c));
				c.moveToNext();
			}
			c.close();
		}
		return hors;
	}

	public static boolean remover(long idHorario) {
		return remover(TABELA_HORARIOS, COLUNA_ID_HORARIO, idHorario);
	}

	public static boolean removerTodos() {
		return removerTodos(TABELA_HORARIOS);
	}

}
